home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / taropyon / he386 / heusers.man < prev    next >
Text File  |  1991-10-18  |  77KB  |  1,954 lines

  1.  
  2. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  3. ┃                                                                  ┃
  4. ┃  386|High-EUP Compiler ver.1.03    ┃
  5. ┃                                                                  ┃
  6. ┃                                     Copyright (c) 1990 TaroPYON  ┃
  7. ┃                                                                  ┃
  8. ┃                                                                  ┃
  9. ┃                     『ユーザーズマニュアル』                     ┃
  10. ┃                                                                  ┃
  11. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  12.  
  13.  
  14.         ******************************************************
  15.         ☆  第1章      イントロダクション
  16.         ******************************************************
  17.  
  18.  
  19.      High-EUP Compiler とはFMTOWNSの標準音楽演奏データEUPHON
  20.     Y 形式の演奏ファイルを生成するためのコンパイラです。
  21.      High-EUP Compiler のソースプログラムは任意のテキストエディタ
  22.     で作成可能です。
  23.      ソースプログラム中の演奏データはF-BASIC386 とも互換性のある『M
  24.     ML(Music Macro Languege )』で記述します。よってF-BASIC386 
  25.     で作成された音楽プログラムをHigh-EUP Compiler でコンパイルして
  26.     EUPHONY 演奏ファイルにコンバートすることも可能です。
  27.      また,ミュージカルプランのシーケンスソフト『MUSIC PRO TOWNS』ま
  28.     たは『MUSIC PRO TOWNS [MIDI] 』 の「MML SAVE」で作成したMML データ
  29.     もコンパイル可能です。
  30.      High-EUP Compiler の装備するMML は従来のものより大幅に拡張さ
  31.     れており,EUPHONY 形式のサポートする機能を100% 引き出します。F-B
  32.     ASIC386 やMUSIC PRO TOWNS では作成不可能だった演奏データもHigh-E
  33.     UP Compiler を使えば簡単に作成可能です。
  34.      対応する音源も内蔵のFM音源,PCM 音源はもちろんのこと,MIDIにもフ
  35.     ル対応しています(ミュージカルプランのRS-232C MIDIアダプタにも対応
  36.     しています)。
  37.      この高機能EUPHONY 演奏データ生成コンパイラを使いこなすため,この
  38.     マニュアルを活用してください。
  39.  
  40.  
  41.  
  42.         ******************************************************
  43.         ☆  第2章      コンパイラの起動
  44.         ******************************************************
  45.  
  46.  
  47.   2.1    コンパイラの起動
  48.  
  49.  High-EUP Compiler はFMTOWNSのネイティブ上で動作するプログラ
  50. ムなので,RUN386.EXEをもちいHE386.EXP というコマンド名で呼び出されます。
  51.  この書式は,
  52.  
  53.     ┌──────────────────────────────┐
  54.     │  RUN386 HE386 [<オプション>] <入力パス名> [<出力パス名>]   │
  55.     └──────────────────────────────┘
  56.  
  57.  となります。
  58.  ここで <入力パス名> とはコンパイルされるMML テキストのパス名のことで
  59. す。ファイル名の拡張子「.MML」は省略可能です。
  60.  コンパイラは<入力パス名>から拡張子を取り除いたファイル名をマクロ名
  61. に設定されるため,組み込みマクロと同じ名前のファイル名は指定できませ
  62. ん(詳しくは「第7章  マクロ展開」見てください)。
  63.  2番目の <出力パス名> は生成されるEUPHONY 演奏ファイルのパス名のこと
  64. です。ファイル名の拡張子「.EUP」は省略可能です。<出力パス名>そのものを
  65. 省略した場合には <入力パス名> の拡張子を「.EUP」に変更したファイル名が
  66. 指定されたとみなされます(この時,EUPHONY 演奏ファイルはカレントディレ
  67. クトリに生成されます)。
  68.  
  69.  パラメータに指定できる <オプション> には以下のものがあります(個々の
  70. 詳しい説明については後述します)。
  71.  
  72.         -?<種別>      ヘルプメッセージの表示
  73.         -c            オプティマイズ禁止
  74.         -l            マクロ内容の表示指定
  75.         -m<数値>      メッセージ表示レベルの指定
  76.         -v            ベロシティ・オーバーエラー有
  77.  
  78.  エラーがなければコンパイラは<出力パス名>に指定されたパスにEUPHONY 演
  79. 奏ファイルを生成します。<出力パス名>が省略されている場合には <入力パス
  80. 名> の拡張子を「.EUP」に変更したEUPHONY 演奏ファイルがカレントディレク
  81. トリに生成されます。
  82.  <出力パス名>と同名のファイルがすでに存在しているとオーバーライトされ
  83. て書き換えられます。
  84.  コンパイルの途中でエラーが発生した場合,EUPHONY 演奏ファイルは途中ま
  85. でコンパイルされたファイルが<出力パス名>の指定されたパスに残ります。し
  86. かしエラーが発生した場合,生成されたEUPHONY 演奏ファイルは正常なもので
  87. はありません。もしこのファイルを演奏しようとした場合,演奏プログラムが
  88. ハングアップする可能性もありますので,絶対に演奏はしないでください。
  89.  
  90. 【使用例】
  91.  
  92.         run386  he386   music.mml
  93.  
  94.      MML テキスト「music.mml 」をコンパイルし,EUPHONY 演奏ファイル
  95.     「msuic.eup 」を生成します。
  96.  
  97.  
  98.  
  99.   2.2    コンパイル・オプション
  100.  
  101.  High-EUP Compiler のパラメータに指定できるコンパイル・オプション
  102. を順に説明します。
  103.  
  104.     -?<種別>  ヘルプメッセージの表示
  105.  
  106.          High-EUP Compiler の簡単な使い方,コンパイラ・オプション
  107.         の一覧を表示します。
  108.          「-?」に続けて<種別>を指定すると,種別に応じたコンパイラの
  109.         各種ヘルプメッセージ,スペックを表示します。
  110.  
  111.             -?ctrl    コントール行の一覧を表示します。
  112.             -?macro   マクロ機能のスペックを表示します。
  113.             -?mml     MML 仕様一覧を表示します。
  114.             -?pri     コンパイラ制御行の一覧を表示します。
  115.             -?v       MML のVコマンドとベロシティの対応を初期設定
  116.                         値を表示します。
  117.  
  118.  
  119.     -o        オプティマイズ禁止
  120.  
  121.          High-EUP Compiler はコンパイル時に不要な演奏データがある
  122.         とそのデータを取り除いて最適化してくれるオプティマイズ機能があ
  123.         ります。
  124.          このオプションを指定するとオプティマイズが禁止されます。
  125.  
  126.     -l        マクロ内容の表示指定
  127.  
  128.          コンパイルが終了した時点で使用されたマクロ名とその内容の一覧
  129.         を表示します。
  130.  
  131.     -m<数値>  メッセージレベルの指定
  132.  
  133.          コンパイラの出力するメッセージのレベルを指定します。
  134.          <数値>はレベルを指定するもで0~4の間で指定します。
  135.          各レベルの内容は以下のとおりです。
  136.  
  137.             0: 最小限のメッセージのみを表示します。-mオプション
  138.                 が省略されている場合はこのレベルが指定されたものとし
  139.                 ます。
  140.             1: レベル0の内容に加え入力行のコメトン行を表示します。
  141.             2: レベル0,1の内容に加え入力行のコントロール行,コ
  142.                 ンパイラ制御行も表示します。
  143.             3: レベル0,1,2の内容に加えすべての入力行を表示し
  144.                 ます。
  145.             4: レベル0,1,2,3の内容に加え,マクロ展開後の内
  146.                 容も表示します。
  147.  
  148.     -v        ベロシティ・オーバーエラー有
  149.  
  150.          コンパイル時に相対指定(] や[ )によってベロシティが制限範囲
  151.         をオーバーした場合はエラーと見なして,コンパイルを中断します。
  152.          このオプションの指定がない場合は,相対指定によってベロシティ
  153.         がオーバーしてもエラーとはせずに上限をオーバーした場合は最大値
  154.         を,下限をオーバーした場合には最小値をとります。
  155.  
  156.  
  157.  
  158.         ******************************************************
  159.         ☆  第3章      MMLテキストの形式
  160.         ******************************************************
  161.  
  162.  
  163.  High-EUP Compiler のソースプログラムは『MML テキスト』と呼ばれテ
  164. キストファイル形式のプログラムとなります。
  165.  MML テキストは行単位に処理され,「コメント行」,「コントロール行」,
  166. 「コンパイラ制御行」,「MML 行」の4つに分類できます。
  167.  MML テキスト中,コマンドや命令はすべて半角文字で指定します。特別にこ
  168. とわりのないかぎりアルファベットの大文字・小文字は区別されず同じものと
  169. して扱われます。
  170.  漢字を含む全角文字はコメントでしか使用できません。
  171.  
  172.  
  173.   3.1    コメント行
  174.  
  175.  行頭の文字がスラッシュ「/」だった場合,その行はコメント行とみなされ
  176. ます。
  177.  文字どおりコメントですので,コンパイルの実行には何の影響もあたえませ
  178. ん。
  179.  
  180. 【コメント行の例】
  181.     ┌───────────────────────────────┐
  182.     │/* filename "test.mml"                                        │
  183.     │/------ Block 1 ------                                        │
  184.     └───────────────────────────────┘
  185.  
  186.  
  187.   3.2    コントロール行
  188.  
  189.  行頭の文字がピリオド「. 」だとその行はコントロール行とみなされます。
  190.  コントロール行に指定できる「コントールコマンド」には以下のものがあり
  191. EUPHONY 演奏ファイルのヘッダ情報を設定したり,音色のファイル名指定,M
  192. ML コマンドの設定などを行います。
  193.  個々の詳しい解説は「第4章 コンロール行」で行います。
  194.  
  195.     《表 3.2.1》    コントロールコマンド一覧
  196.     ┌───────┬───────────────────────┐
  197.     │コントロール行│  内   容                                     │
  198.     ├───────┼───────────────────────┤
  199.     │.title        │タイトルの設定                                │
  200.     │.fm           │FM 音源音色ファイル名の指定                   │
  201.     │.pcm          │PCM音源音色ファイル名の指定                   │
  202.     │.mmltype      │MML タイプの指定                              │
  203.     │.partmax      │使用パート数の指定                            │
  204.     │.part         │パートとトラックの設定                        │
  205.     │.next         │次ブロック指定                                │
  206.     │.end          │コンパイルの終了指定                          │
  207.     │.nulline      │空行をスキップするかどうかの指定              │
  208.     │.ssg          │SSG パート変換を行うかどうかの指定            │
  209.     │.trkport      │トラックポートの設定                          │
  210.     │.trkch        │トラックMIDIチャンネルの設定                  │
  211.     │.fmch         │FM 音源MIDIチャンネルの設定                   │
  212.     │.pcmch        │PCM 音源MIDIチャンネルの設定                  │
  213.     │.vdef         │Vコマンドとベロシティ設定                    │
  214.     │.veltie       │ベロシティが違うとタイを中断するか継続するか  │
  215.     │.chbase       │チャンネルベースの指定                        │
  216.     │.z_cmd        │Zコマンド有効・無効の設定                    │
  217.     │.noteasn      │ノートアサインの設定                          │
  218.     │.meas         │拍子の固定モード指定                          │
  219.     │.statch       │ステータス・チャンネル有効・無効の指定        │
  220.     └───────┴───────────────────────┘
  221.  
  222. 【コントロール行の例】
  223.  
  224.     ┌───────────────────────────────┐
  225.     │.title  ***** Music No.02 *****                               │
  226.     │.fm     fmtone2                                               │
  227.     └───────────────────────────────┘
  228.  
  229.  
  230.   3.3    コンパイラ制御行
  231.  
  232.  行頭の文字がナンバ記号「#」だとその行はコンパイラ制御行とみなされま
  233. す。
  234.  コンパイラ制御行はマクロの定義/解除,外部ファイルのインクルード等を
  235. 行います。
  236.  個々の詳しい解説は「第5章 コンパイラ制御行」で行います。
  237.  
  238.     《表 3.3.1》    コンパイラ制御コマンド一覧
  239.     ┌───────┬───────────────────────┐
  240.     │コンパイラ制御行  │  内   容                                     │
  241.     ├───────┼───────────────────────┤
  242.     │#define       │マクロの定義                                  │
  243.     │#undef        │マクロの定義解除                              │
  244.     │#ifdef        │条件判断ブロック制御                          │
  245.     │#else         │条件判断ブロック制御                          │
  246.     │#endif        │条件判断ブロック制御                          │
  247.     │#include      │外部ファイル取り込み                          │
  248.     └───────┴───────────────────────┘
  249.  
  250. 【コンパイラ制御行の例 】
  251.  
  252.     ┌───────────────────────────────┐
  253.     │#include "drums.def"                                          │
  254.     │#define BSD   n24                                             │
  255.     └───────────────────────────────┘
  256.  
  257.  
  258.   3.4    MML行
  259.  
  260.  「コメント行」,「コントロール行」,「コンパイラ制御行」のいずれにも
  261. 当てはまらない行がMML となります。
  262.  コントロール行に「.nulline skip 」が指定されていない場合には改行だけ
  263. の空行もMML 行とみなされます。
  264.  セミコロン(; )で区切ることで1行中に複数のMML 行を指定することも可
  265. 能です。
  266.  MML 行の中にも,
  267.  
  268.         /* <コメント> */
  269.  
  270.  という形式でコメントを指定できますが,行頭の文字がスラッシュ(/)だ
  271. と,その行全体がコメントとみなされるので注意してください(行頭にスラッ
  272. シュ以外の文字が1つで指定されていればコメント行にはなりません)。
  273.  MML 行は以下の表にあげたMML コマンドによって構成されます。
  274.  MML コマンドの個々の詳しい解説は「第6章 MML コマンド」で行います。
  275.  
  276.     《表 3.4.1》    MMLコマンド一覧
  277.     ┌───────┬───────────────────────┐
  278.     │コメンド名    │  内   容                                     │
  279.     ├───────┼───────────────────────┤
  280.     │r            │休符                                          │
  281.     │a~g        │音程                                          │
  282.     │n            │特殊音程                                      │
  283.     │l            │音長                                          │
  284.     │q            │音長の割合                                    │
  285.     │'             │スタカート                                    │
  286.     │o            │オクターブ                                    │
  287.     │>, <          │オクターブ・アップ/ダウン                    │
  288.     │^             │1オクターブアップ                            │
  289.     │v, @v       │ベロシティ,ボリューム                        │
  290.     │], [          │ベロシティ・アップ/ダウン                    │
  291.     │!            │アクセント                                    │
  292.     │@             │プログラムチェンジ                            │
  293.     │t            │テンポ指定                                    │
  294.     │%s           │拍子                                          │
  295.     │u            │ピッチベンド                                  │
  296.     │%c,%l,%r │パンポット                                    │
  297.     │%d           │ディレイ                                      │
  298.     │k            │キートランスポーズ                            │
  299.     │h            │MIDIチャンネル                                │
  300.     │%o           │出力ポート                                    │
  301.     │?            │拡張コマンド                                  │
  302.     │@c           │コントロールチェンジ                          │
  303.     │%e           │エクスクルーシブメッセージ                    │
  304.     │*             │モジュレーション                              │
  305.     │~, _          │モジュレーション・オン/オフ                  │
  306.     │s            │SSG エンベロープ                              │
  307.     │m            │SSG エンベローブ周波数                        │
  308.     │x            │SSG ノイズモード                              │
  309.     │y            │レジスタ                                      │
  310.     │z            │直接データ指定                                │
  311.     │{, }          │連符                                          │
  312.     │(, )          │リピート                                      │
  313.     │$            │マクロ展開                                    │
  314.     └───────┴───────────────────────┘
  315.  
  316. 【MML 行の例】
  317.  
  318.     ┌───────────────────────────────┐
  319.     │o4v#118q8 l8e4.c&c4<a                                         │
  320.     │o4v#86q6 l8aaaaaaaa                                           │
  321.     └───────────────────────────────┘
  322.  
  323.  
  324.  
  325.         ******************************************************
  326.         ☆  第4章      コントロール行
  327.         ******************************************************
  328.  
  329.  
  330.  MML テキスト中,行頭の文字がピリオド(. )の行はコントロール行とみな
  331. されます。
  332.  この章ではコントロール行に指定するコントロールコマンドについて解説い
  333. たします。
  334.  
  335.  
  336.   4.1    コントロール行について,
  337.  
  338.  コントロール行はコントロールコマンドを指定するもので,演奏ファイルの
  339. ヘッダ情報や音色ファイル名,ノートアサイン,などの各種設定を行います。
  340.  コントロール行は,
  341.  
  342.         ピリオド(.)+コマンド名+空白+パラメータ
  343.  
  344.  という形式で使用されます。
  345.  パラメータにはMML 行と同じマクロ展開処理が施されます。よってMML 行と
  346. 同じように,
  347.  
  348.         $<マクロ名>
  349.  
  350.  という形式でマクロの使用が可能です。
  351.  また,MML の,
  352.  
  353.         (…)n 
  354.  
  355.  という形式のリピート指定もマクロ展開ですので,コントロール行でも同じ
  356. ようにマクロ展開されます。
  357.  これらの仕様により「$,(,)」は単独の文字としては使用できません。
  358.  
  359.  
  360.   4.2    タイトルの指定
  361.  
  362.     ■  TITLE:タイトルの指定
  363.  
  364.     ┌───────────────────────────────┐
  365.     │.title  <文字列>                                              │
  366.     └───────────────────────────────┘
  367.     【パラメータ】
  368.         <文字列>            32文字以内(全角16文字以内)
  369.  
  370.     【解説】
  371.      EUPHONY 演奏ファイルのヘッダ情報に埋め込むタイトルを指定します。
  372.      タイトルは半角32文字,全角で16文字以内の文字列で指定します。
  373.  
  374.  
  375.   4.3    音色ファイルの指定
  376.  
  377.     ■  FM:FM音源音色ファイル名の指定
  378.  
  379.     ┌───────────────────────────────┐
  380.     │.fm  <ファイル名>                                             │
  381.     └───────────────────────────────┘
  382.     【パラメータ】
  383.         <ファイル名>        8文字以内(拡張子は不要)
  384.  
  385.     【解説】
  386.      FM音源用の音色ファイル名を指定します。
  387.      拡張子「.FMB」は指定する必要ありません。
  388.  
  389.  
  390.     ■  PCM:PCM音源音色ファイル名の指定
  391.  
  392.     ┌───────────────────────────────┐
  393.     │.pcm  <ファイル名>                                            │
  394.     └───────────────────────────────┘
  395.     【パラメータ】
  396.         <ファイル名>        8文字以内(拡張子は不要)
  397.  
  398.     【解説】
  399.      PCM 音源用の音色ファイル名を指定します。
  400.      拡張子「.PMB」は指定する必要ありません。
  401.  
  402.  
  403.   4.4    MMLパートに関する設定
  404.  
  405.     ■  MMLTYPE:MMLタイプの指定
  406.  
  407.     ┌───────────────────────────────┐
  408.     │.mmltype <タイプ名>                                           │
  409.     └───────────────────────────────┘
  410.     【パラメータ】
  411.         <タイプ名>          FB386       …F-BASIC 386
  412.                             M_PRO       …MUSIC PRO TOWNS
  413.                             HGPLAY      …HGPLAY
  414.                             WHG         …WHG
  415.                             EDPLAY      …EDPLAY
  416.                             MIDI        …MIDI
  417.  
  418.     【解説】
  419.      MML テキストのMML タイプを指定します。
  420.      MML タイプを指定することで,以下のように初期設定が行われます。
  421.  
  422.         《表 4.4.1》    MMLタイプと初期設定
  423.         ┌─────┬───┬──────┬──────┬─────┐
  424.         │タイプ名  │パート数│ FM 音源パート│PCM 音源パート│MIDIパート  │
  425.         ├─────┼───┼──────┼──────┼─────┤
  426.         │  FB386   │   14 │       0~5 │      6~13 │     なし │
  427.         │  M_PRO   │   14 │       0~5 │      6~13 │     なし │
  428.         │  HGPLAY  │    6 │       0~2 │      3~ 5 │     なし │
  429.         │  WHG     │   12 │ 0~2, 6~8 │3~5, 9~11 │     なし │
  430.         │  EDPLAY  │    6 │       0~2 │      3~ 5 │     なし │
  431.         │  MIDI    │   16 │       なし │       なし │    0~15 │
  432.         └─────┴───┴──────┴──────┴─────┘
  433.  
  434.      MML タイプによる初期設定は固定化された設定内容をユーザーが設定す
  435.     る手間を省くために行われており,上記以外の設定を行う場合にはユーザ
  436.     ーが自前で初期設定を行わなければなりません。
  437.      MML タイプの指定によって使い方や効果が変化する命令はオクターブと
  438.     ステップタイム,SSG 関連の命令です。
  439.      詳しくは「第6章 MMLコマンド」の各MML の解説で取り上げます。
  440.  
  441.  
  442.     ■  PARTMAX:MMLパート数の指定
  443.  
  444.     ┌───────────────────────────────┐
  445.     │.partmax <パート数>                                           │
  446.     └───────────────────────────────┘
  447.     【パラメータ】
  448.         <パート数>          1~64
  449.  
  450.     【解説】
  451.      MML の使用パート数を指定します。
  452.  
  453.  
  454.     ■  PART:パートの設定
  455.  
  456.     ┌───────────────────────────────┐
  457.     │.part  <パート>  <トラック>                                   │
  458.     └───────────────────────────────┘
  459.     【パラメータ】
  460.         <パート>            パート番号  (0~63)
  461.         <トラック>          トラック番号(0~31)
  462.  
  463.     【解説】
  464.      パートとトラック番号の対応を指定します。
  465.  
  466.  
  467.     ■  NEXT:次ブロックの指定
  468.  
  469.     ┌───────────────────────────────┐
  470.     │.next                                                         │
  471.     └───────────────────────────────┘
  472.     【パラメータ】
  473.         なし
  474.  
  475.     【解説】
  476.      次のMML 行を小節の先頭として指定します。
  477.  
  478.  
  479.     ■  END:コンパイル終了
  480.  
  481.     ┌───────────────────────────────┐
  482.     │.end                                                          │
  483.     └───────────────────────────────┘
  484.     【パラメータ】
  485.         なし
  486.  
  487.     【解説】
  488.      コンパイルを終了します。
  489.  
  490.  
  491.     ■  NULLINE:空行を無効にする
  492.  
  493.     ┌───────────────────────────────┐
  494.     │.nulline {skip|rest}                                          │
  495.     └───────────────────────────────┘
  496.     【パラメータ】
  497.         skip                空行を無効にする
  498.         rest                空行は休符とする(デフォルト)
  499.  
  500.     【解説】
  501.      MML 行のうち空行を無効にするか休符とするか指定します。
  502.  
  503.  
  504.     ■  SSG:SSG変換モードの指定
  505.  
  506.     ┌───────────────────────────────┐
  507.     │.ssg  {on|off}                                                │
  508.     └───────────────────────────────┘
  509.     【パラメータ】
  510.         on                  SSG パートを変換する
  511.         off                 SSG パートはそのまま
  512.  
  513.     【解説】
  514.      FMTOWNSにはSSG 音源はありませんが,High-EUP Compiler は
  515.     SSG 音源を使用するMML タイプが指定された場合はPCM 音源部をSSG 音源
  516.     のかわりに割り当てます。
  517.      しかし,SSG 独自のMML コマンドが使われた場合にはエラーとなる場合
  518.     がありますが,「.ssg on 」が指定されていればSSG 独自のコマンドが使
  519.     われてもエラーにならないよう変換されて処理されます。
  520.      SSG 変換の詳細は「第6章 MMLコマンド」の各MML コマンドの解説
  521.     の中で取り上げます。
  522.  
  523.  
  524.   4.5    トラックに関する設定
  525.  
  526.     ■  TRKPORT:トラックポートの設定
  527.  
  528.     ┌───────────────────────────────┐
  529.     │.trkport  <トラック>:<ポート>  [<トラック>:<ポート>…]        │
  530.     └───────────────────────────────┘
  531.     【パラメータ】
  532.         <トラック>          設定トラック番号(0~31)
  533.         <ポート>            出力ポート
  534.  
  535.     【解説】
  536.      指定トラックの出力ポートを設定します。
  537.      <トラック>と<ポート>の設定は空白またはタブで区切ることで1行中に
  538.     いくつでも指定可能です。
  539.      <トラック>の指定はハイフン(‐)によって範囲を指定することも可能
  540.     です。
  541.      出力ポートは「ポート名」または「ポート番号」で指定しますが,その
  542.     内容と以下のとおりです。
  543.  
  544.         《表 4.5.1》    出力ポート
  545.         ┌────┬──┬───────────────┐
  546.         │ポート名│番号│出力先                        │
  547.         ├────┼──┼───────────────┤
  548.         │  INT   │ 255│内蔵音源                      │
  549.         │    A   │   0│MIDIポートA                  │
  550.         │    B   │   1│MIDIポートB                  │
  551.         │    C   │   2│MIDIポートC                  │
  552.         │    D   │   3│MIDIポートD                  │
  553.         │    E   │   4│MIDIポートE                  │
  554.         │    F   │   5│MIDIポートF                  │
  555.         │    G   │   6│MIDIポートG                  │
  556.         │    H   │   7│MIDIポートH                  │
  557.         │   RS   │  16│RS-232C MIDIアダプタ          │
  558.         └────┴──┴───────────────┘
  559.  
  560.     【使用例】
  561.         .trkport  0-31:A 
  562.         .trkpirt  0:A 1:B 2-5:INT
  563.  
  564.  
  565.     ■  TRKCH:トラックMIDIチャンネルの設定
  566.  
  567.     ┌───────────────────────────────┐
  568.     │.trkch  <トラック>:<チャンネル>  [<トラック>:<チャンネル>…]  │
  569.     └───────────────────────────────┘
  570.     【パラメータ】
  571.         <トラック>          設定トラック番号(0~31)
  572.         <チャンネル>        MIDIチャンネル (0~15)
  573.  
  574.     【解説】
  575.      指定トラックのMIDIチャンネルを設定します。
  576.      <トラック>と<チャンネル>の設定は空白またはタブで区切ることで1行
  577.     中にいくつでも指定可能です。
  578.      <トラック>の指定はハイフン(‐)によって範囲を指定することも可能
  579.     です。
  580.  
  581.     【使用例】
  582.         .trkch  0:1  1:2  2:3  3:4  4:5  5:6
  583.         .trkch  6-11:10
  584.  
  585.  
  586.     ■  FMCH:FM MIDIチャンネルの設定
  587.  
  588.     ┌───────────────────────────────┐
  589.     │.fmch  <ボイス>:<チャンネル>  [<ボイス>:<チャンネル>…]       │
  590.     └───────────────────────────────┘
  591.     【パラメータ】
  592.         <ボイス>            設定ボイス番号(0~5)
  593.         <チャンネル>        MIDIチャンネル(0~15)
  594.  
  595.     【解説】
  596.      FMTOWNS本体内蔵のFM音源で発音させる指定ボイスのMIDIチャンネ
  597.     ルを設定します。
  598.      <ボイス>と<チャンネル>の設定は空白またはタブで区切ることで1行中
  599.     にいくつでも指定可能です。
  600.      <ボイス>の指定はハイフン(‐)によって範囲を指定することも可能で
  601.     す。
  602.  
  603.  
  604.     ■  PCMCH:PCM MIDIチャンネルの設定
  605.  
  606.     ┌───────────────────────────────┐
  607.     │.pcmh  <ボイス>:<チャンネル>  [<ボイス>:<チャンネル>…]       │
  608.     └───────────────────────────────┘
  609.     【パラメータ】
  610.         <ボイス>            設定ボイス番号(0~7)
  611.         <チャンネル>        MIDIチャンネル(0~15)
  612.  
  613.     【解説】
  614.      FMTOWNS本体内蔵のPCM 音源で発音させる指定ボイスのMIDIチャン
  615.     ネルを設定します。
  616.      <ボイス>と<チャンネル>の設定は空白またはタブで区切ることで1行中
  617.     にいくつでも指定可能です。
  618.      <ボイス>の指定はハイフン(‐)によって範囲を指定することも可能で
  619.     す。
  620.  
  621.  
  622.   4.6    MMLコマンドに関する設定
  623.  
  624.     ■  VDEF:Vコマンドのベロシティ設定
  625.  
  626.     ┌───────────────────────────────┐
  627.     │.vdef <Vn>:<ベロシティ>                                       │
  628.     └───────────────────────────────┘
  629.     【パラメータ】
  630.         <Vn>                Vコマンドの値(0~15)
  631.         <ベロシティ>        ベロシティ値(0~127 )
  632.  
  633.     【解説】
  634.      MML のVコマンドに各値に設定するベロシティ値を設定します。
  635.      デフォルトでは次のように設定されています。
  636.     
  637.         《表 4.6.1》    Vコマンド初期設定
  638.         ┌────┬────┐  ┌────┬────┐
  639.         │  Vn   │ベロシティ  │  │  Vn   │ベロシティ  │
  640.         ├────┼────┤  ├────┼────┤
  641.         │    0   │    7   │  │    8   │   71   │
  642.         │    1   │   15   │  │    9   │   79   │
  643.         │    2   │   23   │  │   10   │   87   │
  644.         │    3   │   31   │  │   11   │   95   │
  645.         │    4   │   39   │  │   12   │  103   │
  646.         │    5   │   47   │  │   13   │  111   │
  647.         │    6   │   55   │  │   14   │  119   │
  648.         │    7   │   63   │  │   15   │  127   │
  649.         └────┴────┘  └────┴────┘
  650.  
  651.     ■  VELTIE:タイの中断
  652.  
  653.     ┌───────────────────────────────┐
  654.     │.veltine {cont|stop}                                          │
  655.     └───────────────────────────────┘
  656.     【パラメータ】
  657.         cont                そのまま発音する
  658.         stop                発音を中断する
  659.  
  660.     【解説】
  661.      タイ処理中にベロシティを変更した場合に,タイ処理中の発音を中断す
  662.     るか,そのままタイ処理を続けるかどうか指定するものです。
  663.      パラメータには「cont」(タイ継続)または「stop」(タイ中断)のど
  664.     ちらかを指定します。
  665.  
  666.     【使用例】
  667.         .veltie stop
  668.  
  669.  
  670.     ■  CHBASE:MIDIチャンネルベースの指定
  671.  
  672.     ┌───────────────────────────────┐
  673.     │.chbase {0|1}                                                 │
  674.     └───────────────────────────────┘
  675.     【パラメータ】
  676.         0                   MIDIチャンネル指定を0~15にする
  677.                             (デフォルト)
  678.         1                   MIDIチャンネル指定を1~16にする
  679.  
  680.     【解説】
  681.      MML のHコマンドで指定するMIDIチャンネルを0~15で指定するか,1
  682.     ~16で指定するかきめるものです。
  683.  
  684.  
  685.     ■  Z_CMD:Zコマンドを有効にする
  686.  
  687.     ┌───────────────────────────────┐
  688.     │.z_cmd {on|off}                                               │
  689.     └───────────────────────────────┘
  690.     【パラメータ】
  691.         on                  Z コマンドを有効にする
  692.         off                 Z コマンドを無効にする(デフォルト)
  693.  
  694.     【解説】
  695.      MML のZコマンドを有効にするか無効にするか指定するコマンドです。
  696.  
  697.  
  698.   4.7    ノートアサインに関する設定
  699.  
  700.     ■  NOTEASN:形式1  音程の設定
  701.  
  702.     ┌───────────────────────────────┐
  703.     │.noteasn <トラック> note <変更音程>:<音程>                    │
  704.     └───────────────────────────────┘
  705.     【パラメータ】
  706.         <トラック>          トラック番号(0~31)
  707.         <変更音程>          0~127
  708.         <音程>              0~127
  709.  
  710.     【解説】
  711.      <トラック>で指定されたトラックの<変更音程>で指定された音程を実際
  712.     には<音程>で指定した音程で発音するための設定です。
  713.      これによりMML 中の音程と実際に発音される音程の対応を任意に設定で
  714.     きます。
  715.      <変更音程>の指定はハイフン(‐)によって範囲を指定することも可能
  716.     です。
  717.  
  718.     【使用例】
  719.         .noteasn  0  note  24:36
  720.         .noteasn  1  note  60-71:64
  721.  
  722.  
  723.     ■  NOTEASN:形式2  パンポットの設定
  724.  
  725.     ┌───────────────────────────────┐
  726.     │.noteasn <トラック> pan <変更音程>:<オフセット>               │
  727.     └───────────────────────────────┘
  728.     【パラメータ】
  729.         <トラック>          トラック番号(0~31)
  730.         <変更音程>          0~127
  731.         <オフセット>        パンポットのオフセット(-127~+127)
  732.  
  733.     【解説】
  734.      <トラック>で指定されたトラックの<変更音程>で指定された音程が発音
  735.     されるさいにパンポットに<オフセット>で指定された値を加えます。
  736.      これにより音程毎にパンポットが指定可能となります。
  737.      <変更音程>の指定はハイフン(‐)によって範囲を指定することも可能
  738.     です。
  739.  
  740.  
  741.     ■  NOTEASN:形式3  ピッチベンドの設定
  742.  
  743.     ┌───────────────────────────────┐
  744.     │.noteasn <トラック> bend <変更音程>:<オフセット>              │
  745.     └───────────────────────────────┘
  746.     【パラメータ】
  747.         <トラック>          トラック番号(0~31)
  748.         <変更音程>          0~127
  749.         <オフセット>        ピッチベンドのオフセット(-8191~+8191)
  750.  
  751.     【解説】
  752.      <トラック>で指定されたトラックの<変更音程>で指定された音程が発音
  753.     されるさいにピッチベンドに<オフセット>で指定された値を加えます。
  754.      これにより音程毎にピッチベンドが指定可能となります。
  755.      <変更音程>の指定はハイフン(‐)によって範囲を指定することも可能
  756.     です。
  757.  
  758.  
  759.   4.8    その他のコントロールコマンド
  760.  
  761.  これまでの解説の中には登場しなかったコントロールコマンドもいくつかあ
  762. りますが,それらはほとんど使われる機会はないと思われますので説明は省き
  763. ます。
  764.  
  765.  
  766.  
  767.         ******************************************************
  768.         ☆  第5章      コンパイラ制御行
  769.         ******************************************************
  770.  
  771.  
  772.  MML テキスト中,行頭の文字がナンバ記号(#)の行はコンパイラ制御行と
  773. みなされます。
  774.  この章ではコンパイラ制御行の解説いたします。
  775.  
  776.  
  777.   5.1    コンパイラ制御行について,
  778.  
  779.  コンパイラ制御行はマクロの定義・解除,条件コンパイルなどソースリスト
  780. にかかわる制御を行うものでMML や演奏データとは直接関係のない行です。
  781.  コンパイラ制御行は,
  782.  
  783.         ナンバ記号(#)+コマンド名+空白+パラメータ
  784.  
  785.  という形式で使用されます。
  786.  
  787.  
  788.   5.2    マクロ定義・解除
  789.  
  790.  
  791.     ■  DEFINE:マクロの定義
  792.  
  793.     ┌───────────────────────────────┐
  794.     │#define [$]<マクロ名> <マクロ内容>                            │
  795.     └───────────────────────────────┘
  796.     【パラメータ】
  797.         <マクロ名>       16 文字以内
  798.         <マクロ内容>    256 文字以内
  799.  
  800.     【解説】
  801.      マクロの定義を行います。
  802.      <マクロ名>の先頭に指定するドルマーク($)は省略可能です。
  803.      マクロ名に許される文字列はアルファベットとアンダースコア(_),
  804.     クエスチョンマーク(?)です(すべて半角)。アルファベットの大文字
  805.     小文字の区別はありません。
  806.      すでに登録されているマクロ名は一度「#undef 」によって解除してか
  807.     らでないと再定義できません。ただし「$A」や「$B」といった1文字
  808.     だけからなるマクロ名は解除の必要なく自由に再定義できます。
  809.      2桁の16進数にあたる文字列($00~$FF)からなるマクロ名はデフォ
  810.     ルトで定義されているとみなされ,再定義も解除もできません(マクロ展
  811.     開においては16進数に対応する10進数の文字列となる)。
  812.      マクロ内容は 256 文字まで指定可能ですが,省略することも可能です。
  813.      ただしマクロ内容が省略されている場合でもそのマクロ名は定義されて
  814.     いるとみなされますので,1文字だけからなるマクロ名以外を再定義する
  815.     場合には解除が必要です。
  816.  
  817.  
  818.     ■  UNDEF:マクロ定義解除
  819.  
  820.     ┌───────────────────────────────┐
  821.     │#undef [$]<マクロ名>                                          │
  822.     └───────────────────────────────┘
  823.     【パラメータ】
  824.         <マクロ名>       16 文字以内
  825.  
  826.     【解説】
  827.      登録されたマクロの定義解除を行います。
  828.      <マクロ名>の先頭に指定するドルマーク($)は省略可能です。
  829.      登録されていないマクロを解除しようとしてもエラーにはならずコンパ
  830.     イルはそのまま続行されます。
  831.      2桁の16進数にあたる文字列($00~$FF)からなるマクロ名はデフォ
  832.     ルトで定義されているとみなされ,解除しようとするとエラーとなりコン
  833.     パイルは中断されます。
  834.  
  835.  
  836.   5.3    ブロック制御
  837.  
  838.     ■  IFDEF  ~ELSE~ENDIF:ブロック制御1
  839.     ■  IFNDEF~ELSE~ENDIF:ブロック制御2
  840.  
  841.     ┌───────────────────────────────┐
  842.     │#ifdef  [$]<マクロ名>                                         │
  843.     │  (ブロック1)                                              │
  844.     │#else                                                         │
  845.     │  (ブロック2)                                              │
  846.     │#endif                                                        │
  847.     └───────────────────────────────┘
  848.     ┌───────────────────────────────┐
  849.     │#ifndef [$]<マクロ名>                                         │
  850.     │  (ブロック1)                                              │
  851.     │#else                                                         │
  852.     │  (ブロック2)                                              │
  853.     │#endif                                                        │
  854.     └───────────────────────────────┘
  855.  
  856.     【パラメータ】
  857.         <マクロ名>       16 文字以内
  858.  
  859.     【解説】
  860.      #ifdefは<マクロ名>に指定されているマクロが定義されている場合,
  861.     #ifdef~#else 間(ブロック1)のソースリストをコンパイルし,#else 
  862.     ~#endif間(ブロック2)のソースリストはコンパイルされません。
  863.      #ifndef は反対に<マクロ名>の指定されているマクロが定義されていな
  864.     い場合に,#ifndef ~#else 間(ブロック1)のソースリストをコンパイ
  865.     ルし,#else ~#endif間(ブロック2)のソースリストはコンパイルしま
  866.     せん。
  867.      #ifdef,#ifndef 共に#else は省略可能です。その場合は#else ~#end
  868.     if間(ブロック2)は当然存在しません。
  869.      <マクロ名>の先頭に指定するドルマーク($)は省略可能です。
  870.      #ifdef~#else ~#endif,#ifndef ~#else ~#endifのネストはできま
  871.     せん。
  872.  
  873.  
  874.   5.4    外部ファイル読み込み
  875.  
  876.     ■  INCLUDE:外部ファイル読み込み
  877.  
  878.     ┌───────────────────────────────┐
  879.     │#include "<パス名>"                                           │
  880.     └───────────────────────────────┘
  881.     【パラメータ】
  882.         <パス名>        読み込みパス名
  883.  
  884.     【解説】
  885.      <パス名>で指定されたファイルをインクルードファイルとしてソースリ
  886.     ストとして読み込みます。
  887.      インクルードファイルの中ならさらに#includeを使用してファイルを読
  888.     み込むこともできます(最大8段階まで)。
  889.  
  890.  
  891.  
  892.         ******************************************************
  893.         ☆  第6章      MMLコマンド
  894.         ******************************************************
  895.  
  896.  
  897.  MMLとは「Music Macro Language 」の略で音楽の演奏を記号で表した
  898. ものです。
  899.  High-EUP Compiler はFMTOWNSのF-BASIC386,FM7/77/AVシリーズ
  900. 用のHGPLAY,EDPLAYで使われたMML をベースに大幅に機能追加・拡張されてい
  901. ます。
  902.  ここではそのHigh-EUP Compiler のMML コマンドの詳細を解説いたしま
  903. す。
  904.  
  905.  
  906.   6.1    MMLの記述に関して
  907.  
  908.  
  909.  MML 行は1行に最大4000文字までコメンドの指定が可能です。
  910.  
  911.  「/* <コメント> */」とすることでMML 中にコメントが入れられます。ただ
  912. しその行が最後までコメントの場合「*/」は省略できます。
  913.  行の先頭にスラッシュ(/)だとその行全体がコメント行とみなされるので
  914. 注意してください(行頭にスラッシュ以外の文字が1つで指定されていればコ
  915. メント行にはなりません)。
  916.  
  917.  
  918.   6.2    音長に関して
  919.  
  920.     休符や音符の長さはHigh-EUP Compiler のMML では「音長」と表現す
  921. ることにします。
  922.  音長は音符で指定する方法と,ステップタイムで指定する方法と2通りあり
  923. ます。
  924.  音符で指定する場合は何分音符の音符にあたるか,数値で指定します。
  925.  たとえば「4」なら4分音符になります。
  926.  符点は数値の後ろにコンマ(. )を指定して表現可能です(例:符点4分音
  927. 符=「4.」)。また符点は2重まで指定可能です。
  928.  ステップタイムで指定する場合はパーセント記号(%)を先頭にして数値で
  929. 指定します。
  930.  音符とステップタイムの対応は次の表のようになっています。
  931.  
  932.         《表 6.2.1》
  933.         ┌───────┬─────┬─────┐
  934.         │音符          │ ステップタイム │  EDPLAY  │
  935.         ├───────┼─────┼─────┤
  936.         │       全音符 │   384    │   192    │
  937.         │ 符点2分音符 │   288    │   144    │
  938.         │     2分音符 │   192    │    96    │
  939.         │ 符点4分音符 │   144    │    72    │
  940.         │     4分音符 │    96    │    48    │
  941.         │ 符点8分音符 │    72    │    36    │
  942.         │     6分音符 │    64    │    32    │
  943.         │     8分音符 │    48    │    24    │
  944.         │ 符点16分音符 │    36    │    18    │
  945.         │     12分音符 │    32    │    16    │
  946.         │     16分音符 │    24    │    12    │
  947.         │ 符点32分音符 │    18    │     9    │
  948.         │     24分音符 │    16    │     8    │
  949.         │     32分音符 │    12    │     6    │
  950.         │     64分音符 │     6    │     3    │
  951.         └───────┴─────┴─────┘
  952.         ※ 「EDPLAY」はMML タイプがEDPLAYの場合のステップタイム
  953.  
  954.  音符で指定可能な音長の最大値,最小値はそれぞれ2重符点全音符,384 分
  955. 音符です。ステップタイムの場合は1~65535 の範囲で指定可能です。
  956.  実際に発音させる場合には音長はタイ記号(&)を使用することでどんな長
  957. さでも指定可能ですが,タイで結んだ全体の音長もステップタイムに換算して
  958. 65535 以内でなければなりません。
  959.  ステップタイム65535 は170 小節分の長さにあたりますので,実用上は問題
  960. ないと思われます。
  961.  
  962.  
  963.   6.3    発音
  964.  
  965.  
  966.     ■  R:休符
  967.  
  968.     ┌───────────────────────────────┐
  969.     │r[<音長>]                                                    │
  970.     └───────────────────────────────┘
  971.     【パラメータ】
  972.         <音長>              音符またはパーセント記号(%)を先頭にステ
  973.                             ップタイムで指定
  974.  
  975.     【解説】
  976.      MML コマンドの'r'は休符に当たります。
  977.      音長が省略された場合は,MML コマンドの'l'で指定された音長が指定
  978.     されたと見なされます。
  979.  
  980.     【例】
  981.         r4     /* 4分休符 */
  982.         r%192  /* ステップタイム192    */
  983.  
  984.  
  985.     ■  A~G:音程
  986.  
  987.     ┌───────────────────────────────┐
  988.     │{a~g}[<音長>][,<ゲートタイム>]                             │
  989.     └───────────────────────────────┘
  990.     【パラメータ】
  991.         <音長>              音符またはパーセント記号(%)を先頭にステ
  992.                             ップタイムで指定
  993.         <ゲートタイム>      実際に発音する時間をステップタイムで指定
  994.  
  995.     【解説】
  996.      MML のもっとも基本的で大切なコマンドで「c,d,e,f,g,a,
  997.     b」は,それぞれ「ド,レ,ミ,ファ,ソ,ラ,シ」に対応します。
  998.      音長が省略された場合は,MML コマンドの'l'で指定された音長が指定
  999.     されたと見なされます。
  1000.      ゲートタイムが省略された場合は,MML コマンドの'q'で指定された割
  1001.     合によって決定されます。
  1002.  
  1003.  
  1004.     ■  N:特殊音程
  1005.  
  1006.     ┌───────────────────────────────┐
  1007.     │n<音程番号>[%<ステップタイム>][,<ゲートタイム>]             │
  1008.     └───────────────────────────────┘
  1009.     【パラメータ】
  1010.         <音程番号>          0~127 
  1011.         <ステップタイム>    音長はステップタイムでのみ指定可能
  1012.         <ゲートタイム>      実際に発音する時間をステップタイムで指定
  1013.  
  1014.     【解説】
  1015.      'n'は音程を数値で表すコマンドです。
  1016.      音程番号は0~127 の数値で表します。
  1017.      数値は半音単位で表しオクターブ4の「ド」が60に対応しています
  1018.      ステップタイムが省略された場合は,MML コマンドの'l'で指定された
  1019.     音長が指定されたと見なされます。
  1020.  
  1021.  
  1022.   6.4    音長に関連したコマンド
  1023.  
  1024.  
  1025.     ■  L:音長の指定
  1026.  
  1027.     ┌───────────────────────────────┐
  1028.     │l<音長>                                                      │
  1029.     └───────────────────────────────┘
  1030.     【パラメータ】
  1031.         <音長>              音符またはパーセント記号(%)を先頭にステ
  1032.                             ップタイムで指定
  1033.  
  1034.     【解説】
  1035.      休符(r)や音程(a~g,n)で音長が省略された場合に使われる
  1036.     音長を設定します。
  1037.  
  1038.  
  1039.     ■  Q:ゲートタイムの割合
  1040.  
  1041.     ┌───────────────────────────────┐
  1042.     │q[#]<割合>                                                  │
  1043.     └───────────────────────────────┘
  1044.     【パラメータ】
  1045.         #                  高精度指定
  1046.         <割合>              ゲートタイムの割合
  1047.                             (通常1~16,高精度0~ 200)
  1048.  
  1049.     【解説】
  1050.      音程(a~g)または特殊音程(n)でゲートタイムが省略された場合
  1051.     は音長に対しての比率でゲートタイムは決定されます。このコマンドはそ
  1052.     の比率を指定するものです。
  1053.      比率はパラメータの<割合>で指定しますが,単精度(パラメータに「#
  1054.     」の指定がないとき)の場合は1~16の範囲をとります。
  1055.      単精度の場合は,
  1056.  
  1057.         ゲートタイム = 音符×<割合>÷8
  1058.  
  1059.      となっています。つまり<割合>8で音符の長さと時間発音し,8より小
  1060.     さければ音符よりも短い時間,8より大きければ音符よりも長い時間発音
  1061.     されます。
  1062.      高精度指定の場合,<割合>はパーセンテージで表し,
  1063.  
  1064.         ゲートタイム = 音符×<割合>÷100
  1065.  
  1066.      となります(<割合>100 で音符の長さと同じになる)。
  1067.      高精度指定の場合,<割合>は1~ 200までの範囲をとります。
  1068.      ただし,MML タイプがEDPLAYの場合は,高精度指定は,
  1069.     
  1070.         ゲートタイム = 音符×<割合>÷256
  1071.  
  1072.     となっており,<割合>は1~255 の範囲で指定しなければなりません。
  1073.  
  1074.  
  1075.     ■  ’:スタカート
  1076.  
  1077.     ┌───────────────────────────────┐
  1078.     │’[#]<割合>                                                  │
  1079.     └───────────────────────────────┘
  1080.     【パラメータ】
  1081.         #                  高精度指定
  1082.         <割合>              ゲートタイムの割合
  1083.                             (通常1~16,高精度0~ 200)
  1084.  
  1085.     【解説】
  1086.      直後の発音に対してだけゲートタイムの割合を指定します。
  1087.      パラメータの意味,動作はQコマンドと同じです。
  1088.  
  1089.  
  1090.   6.5    オクターブ
  1091.  
  1092.  
  1093.     ■  O:オクターブの指定
  1094.  
  1095.     ┌───────────────────────────────┐
  1096.     │o<オクターブ>                                                │
  1097.     └───────────────────────────────┘
  1098.     【パラメータ】
  1099.         <オクターブ>        オクターブ(0~9)
  1100.  
  1101.     【解説】
  1102.      オクターブを指定します。
  1103.  
  1104.  
  1105.     ■  >,<:オクターブ・アップ/ダウン
  1106.  
  1107.     オクターブアップ
  1108.     ┌───────────────────────────────┐
  1109.     │>                                                            │
  1110.     └───────────────────────────────┘
  1111.     オクターブダウン
  1112.     ┌───────────────────────────────┐
  1113.     │<                                                            │
  1114.     └───────────────────────────────┘
  1115.     【パラメータ】
  1116.         なし
  1117.  
  1118.     【解説】
  1119.      '>'はオクターブを1つ上げ,'<'はオクターブを1つ下げます。
  1120.  
  1121.  
  1122.     ■  ^:1オクターブアップ
  1123.  
  1124.     ┌───────────────────────────────┐
  1125.     │^                                                            │
  1126.     └───────────────────────────────┘
  1127.     【パラメータ】
  1128.         なし
  1129.  
  1130.     【解説】
  1131.      '^'の直後の1音だけ1オクターブ上げます。
  1132.  
  1133.  
  1134.   6.6    ベロシティ&ボリューム
  1135.  
  1136.  
  1137.     ■  V,@V:ベロシティ&ボリューム
  1138.  
  1139.     形式1
  1140.     ┌───────────────────────────────┐
  1141.     │v[{+,-}]<Vn>[,[{+,-}]<ボリューム>]                       │
  1142.     └───────────────────────────────┘
  1143.     形式2
  1144.     ┌───────────────────────────────┐
  1145.     │v#[{+,-}]<ベロシティ>[,[{+,-}]<ボリューム>]             │
  1146.     └───────────────────────────────┘
  1147.     形式3
  1148.     ┌───────────────────────────────┐
  1149.     │@v[{+,-}]<ベロシティ>[,[{+,-}]<ボリューム>]             │
  1150.     └───────────────────────────────┘
  1151.  
  1152.     【パラメータ】
  1153.         <n>                 ベロシティ設定値(0~15)
  1154.         <ベロシティ>        ベロシティ(1~ 127)
  1155.         <ボリューム>        コントロールチェンジのボリューム
  1156.                             (0~ 127)
  1157.  
  1158.     【解説】
  1159.      ベロシティとコントロールチェンジのボリュームを指定します。
  1160.      形式1ではベロシティ<Vn>は0~15の範囲で指定しますが,実際のベロ
  1161.     シティ値はコントロールコマンドの「.vdef 」によって設定された値とな
  1162.     ります(「4.4」参照)
  1163.      形式2と形式3は指定の仕方が違うだけで動作はまったく同じです。
  1164.      <ボリューム>は<ベロシティ>の後ろにカンマ(, )を置いて指定します。
  1165.      どの形式の場合でも<ボリューム>省略できます。
  1166.      <ベロシティ>も省略できますがその場合<ボリューム>は必ず指定しなけ
  1167.     ればなりません(例:v,64 )。
  1168.      <ベロシティ>も<ボリューム>も数値の先頭にプラス記号/マイナス記号
  1169.     (+,-)を置くと相対指定となり,現在のベロシティ値またはボリュー
  1170.     ム値にプラス(+)の場合は値が加えられ,マイナス(-)の場合は値が
  1171.     引かれます。
  1172.  
  1173.  
  1174.     ■  ],[:ベロシティ・アップ/ダウン
  1175.  
  1176.     ベロシティアップ:形式1
  1177.     ┌───────────────────────────────┐
  1178.     │][<Vn>]                                                      │
  1179.     └───────────────────────────────┘
  1180.     ベロシティアップ:形式2
  1181.     ┌───────────────────────────────┐
  1182.     │]#[<ベロシティ>]                                            │
  1183.     └───────────────────────────────┘
  1184.     ベロシティダウン:形式1
  1185.     ┌───────────────────────────────┐
  1186.     │[[<Vn>]                                                      │
  1187.     └───────────────────────────────┘
  1188.     ベロシティダウン:形式2
  1189.     ┌───────────────────────────────┐
  1190.     │[#[<ベロシティ>]                                            │
  1191.     └───────────────────────────────┘
  1192.  
  1193.     【パラメータ】
  1194.         <Vn>                ベロシティ設定値(1~15)
  1195.         <ベロシティ>        ベロシティ値(1~ 127)
  1196.  
  1197.     【解説】
  1198.      ']'はベロシティ値を大きくし,'['は反対にベロシティ値を小さくし
  1199.     ます。
  1200.      ベロシティ・アップ/ダウンともに形式1ではベロシティ<Vn>は1~15
  1201.     の範囲で指定しますが,実際のベロシティ値はコントロールコマンドの「
  1202.     .vdef 」によって設定された値となります(「4.4」参照)
  1203.      形式1,2ともにパラメータが省略された場合はそれぞれの最小の値,
  1204.     すなわち「1」が指定されたとみなされます。
  1205.  
  1206.  
  1207.     ■  !:アクセント
  1208.  
  1209.     形式1
  1210.     ┌───────────────────────────────┐
  1211.     │![{+,-}]<Vn>                                               │
  1212.     └───────────────────────────────┘
  1213.     形式2
  1214.     ┌───────────────────────────────┐
  1215.     │!#[{+,-}]<ベロシティ>                                      │
  1216.     └───────────────────────────────┘
  1217.  
  1218.     【パラメータ】
  1219.         <Vn>                ベロシティ設定値(1~15)
  1220.         <ベロシティ>        ベロシティ値(1~ 127)
  1221.  
  1222.     【解説】
  1223.      直後の発音に対してのみベロシティを指定します。
  1224.      形式1ではベロシティ<Vn>は1~15の範囲で指定しますが,実際のベロ
  1225.     シティ値はコントロールコマンドの「.vdef 」によって設定された値とな
  1226.     ります(「4.4」参照)
  1227.      形式1,2とも数値の先頭にプラス記号/マイナス記号(+,-)を置
  1228.     くと相対指定となり,現在のベロシティ値またはボリューム値にプラス(
  1229.     +)の場合は値が加えられ,マイナス(-)の場合は値が引かれます。
  1230.  
  1231.     【使用例】
  1232.         !15c
  1233.         !#+8c
  1234.  
  1235.  
  1236.   6.7    音色変更
  1237.  
  1238.  
  1239.     ■ @:プログラムチェンジ
  1240.  
  1241.     ┌───────────────────────────────┐
  1242.     │@<音色番号>                                                  │
  1243.     └───────────────────────────────┘
  1244.     【パラメータ】
  1245.         <音色番号>          1~127
  1246.  
  1247.     【解説】
  1248.      MIDIの場合はプログラムチェンジを送信します。内臓音源では音色を
  1249.     変更します。
  1250.  
  1251.     【使用例】
  1252.         @14
  1253.  
  1254.  
  1255.   6.8    テンポ
  1256.  
  1257.  
  1258.     ■  T:テンポ設定
  1259.  
  1260.     ┌───────────────────────────────┐
  1261.     │t[{+,-}]<テンポ>                                           │
  1262.     └───────────────────────────────┘
  1263.     【パラメータ】
  1264.         <テンポ>            30~280
  1265.  
  1266.     【解説】
  1267.      演奏のテンポを設定します。
  1268.      プラス記号/マイナス記号(+,-)を置くと相対指定となり,プラス
  1269.     (+)の場合はテンポが早められ,マイナス(-)の場合はテンポが遅く
  1270.     なります。
  1271.  
  1272.  
  1273.     ■  S%:拍子
  1274.  
  1275.     ┌───────────────────────────────┐
  1276.     │s%<n>/<m>                                                  │
  1277.     └───────────────────────────────┘
  1278.     【パラメータ】
  1279.         <n>, <m>            1,2,3,4,6,8,12,16
  1280.  
  1281.     【解説】
  1282.      拍子を「<m>分の<n>拍子」といった具合に指定します。
  1283.      F-BASIC 386との互換性ため設けられているコマンドで実際には何の動
  1284.     作もしません。
  1285.  
  1286.  
  1287.   6.9    ピッチベンド
  1288.  
  1289.  
  1290.     ■  U:ピッチベンド
  1291.  
  1292.     ┌───────────────────────────────┐
  1293.     │u<ベンド>                                                    │
  1294.     └───────────────────────────────┘
  1295.     【パラメータ】
  1296.         <ベンド>            -8192~+8191
  1297.  
  1298.     【解説】
  1299.      音程を微妙に変化させるコマンドです。
  1300.      内蔵音源の場合はピッチベンドを一杯に動かすと(-8192~+8191)で
  1301.     2オクターブ変化します。
  1302.  
  1303.  
  1304.   6.10    パンポット
  1305.  
  1306.  
  1307.     ■  %C,%L,%R:パンポット
  1308.  
  1309.     形式1
  1310.     ┌───────────────────────────────┐
  1311.     │%c[#][<n>]                                                 │
  1312.     └───────────────────────────────┘
  1313.     【パラメータ】
  1314.         #                  高精度指定
  1315.         <n>                 単精度-15~15,高精度-64~63
  1316.  
  1317.     形式2
  1318.     ┌───────────────────────────────┐
  1319.     │%l[#][{+,-}]<n>                                         │
  1320.     └───────────────────────────────┘
  1321.     【パラメータ】
  1322.         #                  高精度指定
  1323.         <n>                 単精度1~15,高精度1~63
  1324.  
  1325.     形式3
  1326.     ┌───────────────────────────────┐
  1327.     │%r[#][{+,-}]<n>                                         │
  1328.     └───────────────────────────────┘
  1329.     【パラメータ】
  1330.         #                  高精度指定
  1331.         <n>                 単精度1~15,高精度1~63
  1332.  
  1333.     【解説】
  1334.      パンポット(音の定位)を指定します。
  1335.      形式1(%c)は<n> の値が0で中央,正だと右より,負だと左よりに
  1336.     なります。
  1337.      形式2(%l),形式3(%r)はそれぞれ左より,右よりのパンポッ
  1338.     トを設定します。またプラス記号/マイナス記号(+,-)を置くと相対
  1339.     指定となり,%lはプラス(+)で左,マイナス(-)で右に,%rはプ
  1340.     ラスで右,マイナスで左の方向に,指定の値変化します。
  1341.  
  1342.     【使用例】
  1343.         %c0
  1344.         %r9
  1345.         %l+2
  1346.  
  1347.  
  1348.   6.11  エフェクト
  1349.  
  1350.     ■  %D:ディレイ
  1351.  
  1352.     ┌───────────────────────────────┐
  1353.     │%d<ディレイタイム>                                          │
  1354.     └───────────────────────────────┘
  1355.     【パラメータ】
  1356.         <ディレイタイム>    音長で指定。音符(384 分音符~全音符)また
  1357.                             はパーセント記号(%)を先頭にステップタイ
  1358.                             ム(0~ 384)で指定
  1359.  
  1360.     【解説】
  1361.      <ディレイタイム>に指定した時間(音符かステップタイムで指定する)
  1362.     だけ演奏を遅らせます。
  1363.      一度指定したディレイを解除するには「%d%0」と指定してください。
  1364.  
  1365.     【使用例】
  1366.         %d%24
  1367.  
  1368.  
  1369.     ■  K:キートランスポーズ
  1370.  
  1371.     ┌───────────────────────────────┐
  1372.     │k<n>                                                         │
  1373.     └───────────────────────────────┘
  1374.     【パラメータ】
  1375.         <n>         -127~127
  1376.  
  1377.     【解説】
  1378.      指定の値<n> だけ音程をシフトさせます。
  1379.      値<n> が1変わるごとに半音分シフトされます。正の値だと音程が上が
  1380.     り,負の値だと音程が下がり,0だとシフトなしです。
  1381.      1オクターブ音程上げたい場合には+12を指定することになります。
  1382.  
  1383.  
  1384.   6.12  出力コントロール
  1385.  
  1386.     ■  H:MIDIチャンネル
  1387.  
  1388.     ┌───────────────────────────────┐
  1389.     │h<MIDIチャンネル>                                            │
  1390.     └───────────────────────────────┘
  1391.     【パラメータ】
  1392.         <MIDIチャンネル>    MIDIチャンネル(0~15または1~16)
  1393.  
  1394.     【解説】
  1395.      MIDIに出力する場合のMIDIチャンネルを指定します。
  1396.      コントロールコマンドに「.chbase 0 」が指定されていればMIDIチャン
  1397.     ネルは0~15の範囲で指定しますが,「.chbase 1 」が指定されていれば
  1398.     1~16の範囲で指定します。
  1399.  
  1400.     【使用例】
  1401.         h1
  1402.  
  1403.  
  1404.     ■  %O:出力ポート
  1405.  
  1406.     ┌───────────────────────────────┐
  1407.     │%o<ポート番号>                                              │
  1408.     └───────────────────────────────┘
  1409.     【パラメータ】
  1410.         <ポート番号>        ポート番号(0~255)
  1411.  
  1412.     【解説】
  1413.      演奏中にトラックの出力ポートを変更します。
  1414.      <ポート番号>については「4.5 トラックに関する設定」の表4.5.1 
  1415.     を見てください。
  1416.  
  1417.     【使用例】
  1418.         %o255
  1419.  
  1420.  
  1421.   6.13  MIDI
  1422.  
  1423.  
  1424.     ■  %E:エクスクルーシブメッセージ
  1425.  
  1426.     ┌───────────────────────────────┐
  1427.     │%e<データ>[,<データ>・・・]                                    │
  1428.     └───────────────────────────────┘
  1429.     【パラメータ】
  1430.         <データ>            送信データ(0~127)
  1431.  
  1432.     【解説】
  1433.      MIDIにエクスクルーシブメッセージを送信します。
  1434.      データは最大2000バイト指定可能です。
  1435.  
  1436.  
  1437.     ■  *, ̄,_:モジュレーションデプス
  1438.  
  1439.     形式1
  1440.     ┌───────────────────────────────┐
  1441.     │*<n>                                                         │
  1442.     └───────────────────────────────┘
  1443.     【パラメータ】
  1444.         <n>                 モジュレーションデプス(0~127)
  1445.  
  1446.     形式2:モジュレーションオン
  1447.     ┌───────────────────────────────┐
  1448.     │ ̄                                                            │
  1449.     └───────────────────────────────┘
  1450.     形式3:モジュレーションオフ
  1451.     ┌───────────────────────────────┐
  1452.     │_                                                            │
  1453.     └───────────────────────────────┘
  1454.  
  1455.     【解説】
  1456.      モジュレーションデプスを指定します。
  1457.      形式2,形式3のモジュレーションのオン/オフは,形式1の<n> に
  1458.     127 /0を指定するのと同じです。
  1459.  
  1460.  
  1461.     ■  ?0,@C:コントロールチェンジ
  1462.  
  1463.     形式1
  1464.     ┌───────────────────────────────┐
  1465.     │?0/<p1>,<p2>                                               │
  1466.     └───────────────────────────────┘
  1467.     形式2
  1468.     ┌───────────────────────────────┐
  1469.     │@c<p1>/<p2>                                                │
  1470.     └───────────────────────────────┘
  1471.  
  1472.     【パラメータ】
  1473.         <p1>, <p2>          0~127
  1474.  
  1475.     【解説】
  1476.      MIDIのコントロールチェンジを送信します。
  1477.      形式1,2は書き方が違うだけで内容は同じです。
  1478.  
  1479.     【使用例】
  1480.         ?0/10,120
  1481.         @c7/127
  1482.  
  1483.  
  1484.   6.14  SSG
  1485.  
  1486.  
  1487.     ■  M:SSGエンベロープ周波数の指定
  1488.  
  1489.     ┌───────────────────────────────┐
  1490.     │m<周波数>                                                    │
  1491.     └───────────────────────────────┘
  1492.     【パラメータ】
  1493.         <周波数>
  1494.  
  1495.     【解説】
  1496.      HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
  1497.     ンドです。
  1498.      コントロールコマンドで「SSG 変換」が指定されているパート(PCM 音
  1499.     源パート)にだけ有効です。SSG 変換が指定されていないパートで使うと
  1500.     コンパイル時にエラーとなります。
  1501.      本来はSSG 音源のエンベロープ周波数を設定するコマンドですがFMTO
  1502.     WNSにはSSG 音源はありませんので実際には何の動作もしません。
  1503.  
  1504.  
  1505.     ■  S:SSGエンベロープの指定
  1506.  
  1507.     ┌───────────────────────────────┐
  1508.     │s<エンベロープ>                                              │
  1509.     └───────────────────────────────┘
  1510.     【パラメータ】
  1511.         <エンベロープ>      エンベロープ番号(0~127)
  1512.  
  1513.     【解説】
  1514.      HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
  1515.     ンドです。
  1516.      本来はSSG 音源のエンベロープを指定するコマンドですが,High-EUP
  1517.     Compilerではプログラムチェンジ(音色変更)と同等の動作をします。
  1518.      「@<n> 」ではプログラムチェンジは1~128 の範囲で指定しますが,
  1519.     sコマンドでは0~127 の範囲で指定します。
  1520.      コントロールコマンドで「SSG 変換」が指定されているパート(PCM 音
  1521.     源パート)で使うとエンベロープ番号は次のようにプログラムチェンジに
  1522.     変換されます。
  1523.  
  1524.         S0~3   →  @9
  1525.         S4~7   →  @9
  1526.         S8      →  @8
  1527.         S9      →  @9
  1528.         S10     →  @10
  1529.         S11     →  @11
  1530.         S12     →  @12
  1531.         S13     →  @13
  1532.         S14     →  @14
  1533.         S15     →  @15
  1534.         S16~31 →  @16~31
  1535.  
  1536.  
  1537.     ■  X:SSGノイズコントロール
  1538.  
  1539.     ┌───────────────────────────────┐
  1540.     │x<ノイズモード>                                              │
  1541.     └───────────────────────────────┘
  1542.     【パラメータ】
  1543.         <ノイズモード>      ノイズモード(0~2)
  1544.  
  1545.     【解説】
  1546.      HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
  1547.     ンドです。
  1548.      コントロールコマンドで「SSG 変換」が指定されているパート(PCM 音
  1549.     源パート)にだけ有効です。SSG 変換が指定されていないパートで使うと
  1550.     コンパイル時にエラーとなります。
  1551.      本来はSSG 音源のノイズモードを設定するコマンドですがFMTOWNS
  1552.     にはSSG 音源はありませんので実際には何の動作もしません。
  1553.  
  1554.  
  1555.     ■  Y:レジスタ設定
  1556.  
  1557.     ┌───────────────────────────────┐
  1558.     │y<レジスタ>,<データ>                                         │
  1559.     └───────────────────────────────┘
  1560.     【パラメータ】
  1561.         <レジスタ>          0~65535
  1562.         <データ>            0~65535
  1563.  
  1564.     【解説】
  1565.      HGPLAYやEDPLAYからの移植作業が楽になるようサポートされているコマ
  1566.     ンドです。
  1567.      コントロールコマンドで「SSG 変換」が指定されているパート(PCM 音
  1568.     源パート)にだけ有効です。SSG 変換が指定されていないパートで使うと
  1569.     コンパイル時にエラーとなります。
  1570.      本来はSSG 音源やFM音源の内部レジスタを操作するコマンドですが実際
  1571.     には何の動作もしません。
  1572.  
  1573.  
  1574.   6.15  連符
  1575.  
  1576.  
  1577.     ■  {,}:連符
  1578.  
  1579.     ┌───────────────────────────────┐
  1580.     │{<MML>}[<音長>]                                             │
  1581.     └───────────────────────────────┘
  1582.     【パラメータ】
  1583.         <MML>               MML コマンド文字列
  1584.         <音長>              音符またはパーセント記号(%)を先頭にステ
  1585.                             ップタイムで指定
  1586.  
  1587.     【解説】
  1588.      <音長>で指定した音長に収まるように{}の中の発音に関するMML コマ
  1589.     ンドを均等に分割します。
  1590.      <音長>が省略された場合は,MML コマンドの'l'で指定された音長が指
  1591.     定されたと見なされます。
  1592.      <MML>の中に音長が指定してあってもすべて無効になります。
  1593.      連符のネストはできません。
  1594.  
  1595.  
  1596.   6.17  マクロ展開
  1597.  
  1598.     ■  (,):リピート
  1599.  
  1600.     ┌───────────────────────────────┐
  1601.     │(<MML>)[<n>]                                                │
  1602.     └───────────────────────────────┘
  1603.     【パラメータ】
  1604.         <MML>               MML コマンド文字列
  1605.         <n>                 リピート回数(2~)
  1606.  
  1607.     【解説】
  1608.      ()で括られた<MML> を<n> で指定された回数だけくりかえします。
  1609.      <n> が省略された場合は2が指定されたとみなされます。
  1610.      このリピートはマクロ展開で一度文字列を展開してから処理されますの
  1611.     で展開後の文字列が4000文字を越えるとエラーとなります。
  1612.  
  1613.  
  1614.     ■  $:マクロ展開
  1615.  
  1616.     ┌───────────────────────────────┐
  1617.     │$<マクロ名>[(<パラメータ>)]                                │
  1618.     └───────────────────────────────┘
  1619.     【パラメータ】
  1620.         <マクロ名>          マクロ名(16文字以内)
  1621.         <パラメタ>          パラメータ文字列
  1622.  
  1623.     【解説】
  1624.      ドル記号($)の後ろのマクロ名を指定すると,そのマクロ内容が展開
  1625.     されます。
  1626.      マクロはコンパイラ制御コマンドの「#define 」で定義したものか,組
  1627.     み込みマクロが使えます。
  1628.      <パラメータ>はマクロ名のすぐ後ろに()をおいてその中に指定します。
  1629.     マクロ名と()の間に空白がひとつでもあると()がリピート展開とみな
  1630.     されて処理されますので注意してください。
  1631.      <パラメータ>は省略可能ですが,その場合マクロ名の後ろには空白を1
  1632.     つ以上置いてください。そうしないとマクロ名と他のMML コマンドとの区
  1633.     別がつかなくなりエラーとなる場合があります(実際にはマクロ名の取り
  1634.     出しはマクロ名に使用できる文字以外の文字が発見されたところまでが有
  1635.     効となっています)。
  1636.  
  1637.  
  1638.   6.16  その他のMMLコマンド
  1639.  
  1640.     ■  Z:データ出力
  1641.  
  1642.     ┌───────────────────────────────┐
  1643.     │z<データ>[,<データ>・・・]                                      │
  1644.     └───────────────────────────────┘
  1645.     【パラメータ】
  1646.         <データ>            送信データ(0~255)
  1647.  
  1648.     【解説】
  1649.      コントロールコマンドで「.z_cmd on 」が指定されている場合にも有効
  1650.     なコマンドです。
  1651.      本来はMIDIに指定のデータを送信するコマンドですが,High-EUP C
  1652.     ompiler では指定のデータをEUPHONY 演奏データとして書き込みます。
  1653.      ですから使用には充分な注意が必要です。
  1654.      EUPHONY 演奏データの仕様にないデータを指定するとコンパイル時にエ
  1655.     ラーとなったり,ワーニングが出る可能性もあります。
  1656.  
  1657.  
  1658.  
  1659.         ******************************************************
  1660.         ☆  第7章      マクロ展開
  1661.         ******************************************************
  1662.  
  1663.  
  1664.  この章ではマクロ展開についての解説を行います。
  1665.  
  1666.  
  1667.   7.1    マクロについて
  1668.  
  1669.  
  1670.  High-EUP Compiler のマクロは2種類に大別できます。
  1671.  1つは「ユーザー定義マクロ」,ひとつは「組み込みマクロ」です。
  1672.  「ユーザー定義マクロ」とはその名のとおりユーザーが自由に定義して使え
  1673. るマクロです。マクロの定義と解除はコンパイラ制御コマンドの「#define」,
  1674. 「#undef」で行います。
  1675.  「組み込みマクロ」はシステムに最初から定義されているマクロのことです。
  1676. これらはユーザが予め定義していなくても使うことができます。
  1677.  組み込みマクロには以下のようなマクロがあります。
  1678.  
  1679.     $00~$FF      対応する16進数を展開する
  1680.     $cho           チョーキング用
  1681.     $slide         パラメータスライド用
  1682.     $vib           ビブラート用
  1683.     $wave          パラメータウェーブ用
  1684.  
  1685.  ユーザー定義マクロはこれらの組み込みマクロ以外のマクロ名を使わなけれ
  1686. ばなりません。
  1687.  マクロの中から更にマクロを使用することも可能ですが,自分自身を定義し
  1688. てしまうような使い方をするとコンパイラがハングアップしますので注意して
  1689. ください。
  1690.  次のようなマクロ定義は行ってはいけません。
  1691.  
  1692.         #define $A      t120 $B 
  1693.         #define $B      $A v15
  1694.  
  1695. ※   特別なマクロ展開として「(…)n 」といった形式で使用するリピート
  1696.     展開があります。使い方は「第6章 MMLコマンド:6.17 マクロ展
  1697.     開」を参照してください。
  1698.  
  1699.  
  1700.   7.2    ユーザー定義マクロ
  1701.  
  1702.  
  1703.  ユーザー定義マクロはユーザーが自由に定義して使えるマクロです。
  1704.   256個まで定義可能で,マクロ内容は最大 256文字まで使用可能です。
  1705.  マクロの定義・解除はコンパイラ制御行の「#define」,「#undef」 によっ
  1706. て行います(「第5章 コンパイラ制御行:5.2 マクロ定義・解除」参照
  1707. )。
  1708.  
  1709.   ・マクロパラメータ
  1710.  
  1711.  マクロ展開時にマクロ名の後ろに()を指定して括弧に中にパラメータが指
  1712. 定できます。
  1713.  パラメータはマクロ名のすぐ後ろに()をおいてその中に指定します。マク
  1714. ロ名と()の間に空白がひとつでもあると()がリピート展開とみなされて処
  1715. 理されますので注意してください。
  1716.  ユーザー定義マクロのパラメータは展開されたマクロ内容の後ろに単純に追
  1717. 加されるだけです。
  1718.  たとえば,
  1719.  
  1720.         #define note    C
  1721.  
  1722.  とすると,「$note(4)」は「C4」と展開されます。
  1723.  
  1724.   ・自動設定マクロ
  1725.  
  1726.  コンパイラ起動時にMML テキストの入力パス名から拡張子を取り除いたファ
  1727. イル名をマクロ名とするマクロが自動的に定義されます(マクロ内容は空です
  1728. )。
  1729.  このためコンパイラ起動時の入力パス名には組み込みマクロと同じ名前のフ
  1730. ァイル名は指定できません。
  1731.  
  1732.  
  1733.   7.3    組み込みマクロ
  1734.  
  1735.  
  1736.  組み込みマクロはシステムに最初から定義されているマクロのことで,ユー
  1737. ザが予め定義していなくても使うことができます。
  1738.  
  1739.  
  1740.     ■  $slide:パラメータスライド用マクロ
  1741.  
  1742.     ┌───────────────────────────────┐
  1743.     │$slide(<cmd>,<note>,<len>,<n>,<tie>,<fun>,<sp>,<ep> )      │
  1744.     └───────────────────────────────┘
  1745.     【パラメータ】
  1746.         <cmd>               コマンド
  1747.         <note>              音程(a~g,r,n)
  1748.         <len>               音長,音符またはパーセント記号(%)を先頭
  1749.                             にステップタイムで指定
  1750.         <n>                 分解数,全体の音長は<len> ×<n> となる。
  1751.         <tie>               タイを指定する場合は「&」を指定する
  1752.         <fun>               関数    x       1次関数
  1753.                                     x^2     2次関数
  1754.                                     e^x     指数関数
  1755.                                     sqr     平方根
  1756.         <sp>                変化開始値
  1757.         <ep>                変化終了値
  1758.  
  1759.     【解説】
  1760.      パラメータを変化させるマクロです。
  1761.      <cmd> のパラメータを<sp>から<ep>まで,<fun> に指定された関数によ
  1762.     って変化させます。
  1763.  
  1764.     【使用例】
  1765.         $slide(%c,e,128,16,&,x,15,-15) /* パンポットを変化させる */
  1766.  
  1767.  
  1768.     ■  $wave:パラメータウェーブ用マクロ
  1769.  
  1770.     ┌───────────────────────────────┐
  1771.     │$wave(<cmd>,<note>,<len>,<n>,<tie>,<fun>,<s>,<a>,<spd>)    │
  1772.     └───────────────────────────────┘
  1773.     【パラメータ】
  1774.         <cmd>               コマンド
  1775.         <note>              音程(a~g,r,n)
  1776.         <len>               音長,音符またはパーセント記号(%)を先頭
  1777.                             にステップタイムで指定
  1778.         <n>                 分解数,全体の音長は<len> ×<n> となる。
  1779.         <tie>               タイを指定する場合は「&」を指定する
  1780.         <fun>               関数    sin     正弦波(~~)
  1781.                                     tri     三角波(/\/\)
  1782.         <s>                 変化開始値
  1783.         <a>                 振幅,<s> を中心に±a 変化する
  1784.         <spd>               変化速度
  1785.  
  1786.     【解説】
  1787.      パラメータを周期的に変化させるマクロ関数です。
  1788.      <cmd> にあたえるパラメータを<s> 中心に振幅<a> の幅で変化させます。
  1789.      具体的には,
  1790.  
  1791.         for( i=0; i < <n>; ++i )
  1792.             parameter = <s> + <a> × sin( i×<spd> );
  1793.  
  1794.      で変化させています(sin に与える角度は弧度法)。
  1795.      よって<spd> に180 を指定するとまったく変化しなくなってしまいます
  1796.      <spd> に90を指定すると,
  1797.  
  1798.         <s> ⇒ 最大値(<s>+<a>)⇒ <s> ⇒ 最小値(<s>-<a>)⇒
  1799.  
  1800.      と変化します。
  1801.  
  1802.     【アドバイス】
  1803.      変化の周期は<len> と<spd> の組み合わせによって決まります(実際に
  1804.     はテンポも関係する)。
  1805.      <len> を64分音符にすると,<spd>は10, 15, 30, 45, 90といった値で
  1806.     使うといいようです。
  1807.  
  1808.     【使用例】
  1809.         $wave(v#,c,64,128,,sin,80,16,30) /* ベロシティを変化させる */
  1810.  
  1811.  
  1812.     ■  $cho:チョーキング用マクロ
  1813.  
  1814.     ┌───────────────────────────────┐
  1815.     │$cho(<note>,<len>,<n>,<fun>,<sp>,<ep> )                    │
  1816.     └───────────────────────────────┘
  1817.     【パラメータ】
  1818.         <note>              音程(a~g,r,n)
  1819.         <len>               音長,音符またはパーセント記号(%)を先頭
  1820.                             にステップタイムで指定
  1821.         <n>                 分解数,全体の音長は<len> ×<n> となる。
  1822.         <fun>               関数    x       1次関数
  1823.                                     x^2     2次関数
  1824.                                     e^x     指数関数
  1825.                                     sqr     平方根
  1826.         <sp>                変化開始値
  1827.         <ep>                変化終了値
  1828.  
  1829.     【解説】
  1830.      ピッチベンド(MML のUコマンドのパラメータ)を変化させるマクロで
  1831.     す。
  1832.      ピッチベンドを<sp>から<ep>まで,<fun> に指定された関数によって変
  1833.     化させます。
  1834.      このマクロは$slide に次のように指定したのと同じ動作をします。
  1835.  
  1836.         $slide( u, <note>, c<len>, <n>, &, <fun>, <sp>, <ep> )
  1837.  
  1838.  
  1839.     ■  $vib:ビブラート用マクロ
  1840.  
  1841.     ┌───────────────────────────────┐
  1842.     │$vib(<note>,<len>,<n>,<fun>,<s>,<a>,<spd>)                 │
  1843.     └───────────────────────────────┘
  1844.     【パラメータ】
  1845.         <note>              音程(a~g,r,n)
  1846.         <len>               音長,音符またはパーセント記号(%)を先頭
  1847.                             にステップタイムで指定
  1848.         <n>                 分解数,全体の音長は<len> ×<n> となる。
  1849.         <fun>               関数    sin     正弦波(~~)
  1850.                                     tri     三角波(/\/\)
  1851.         <s>                 変化開始値
  1852.         <a>                 振幅,<s> を中心に±a 変化する
  1853.         <spd>               変化速度
  1854.  
  1855.     【解説】
  1856.      ピッチベンド(uコマンドのパラメータ)パラメータを周期的に変化さ
  1857.     せるマクロ関数です。
  1858.      ピッチベンドを<s> 中心に振幅<a> の幅で変化させます。
  1859.      このマクロは$waveに次のように指定したのと同じ動作をします。
  1860.  
  1861.         $wave(u,<note>,<len>,<n>,&,<fun>,<s>,<a>,<spd> )
  1862.  
  1863.  
  1864.  
  1865.         ******************************************************
  1866.         ☆              付録
  1867.         ******************************************************
  1868.  
  1869.  
  1870.  
  1871.   ●  付録ファイル説明
  1872.  
  1873.  
  1874.     ・“PIANO.DEF”:ピアノ用パンポット定義ファイル
  1875.  
  1876.      "PAINO.DEF" はHigh-EUP Compilerの ノートアサイン機能を使用し
  1877.     て音程毎にパンポットを設定するための定義ファイルです。
  1878.      この定義ファイルを読み込むだけで音程の低いほうは左から,音程の高
  1879.     いほうは右から音を出すといったことが可能です。
  1880.      実際の使い方,マクロ$TRK に使用するトラック番号を設定して,「#i
  1881.     nclude」でインクルードします。
  1882.      複数のトラックに使いたい場合は,使いたいトラックの数だけ同じよう
  1883.     に$TRK を定義しインクルードします。
  1884.  
  1885.     【使用例】
  1886.         /* トラック0,1に"PIANO.DEF"を使用する  */
  1887.         #define     TRK     0
  1888.         #include    "piano.def"
  1889.         #define     TRK     1
  1890.         #include    "piano.def"
  1891.  
  1892.  
  1893.     ・“MPDRUMS.DEF”:MUSIC PRO TOWNS 用ドラム設定ファイル
  1894.  
  1895.      ミュージカルプランのMUSIC PRO TOWNS でMML セーブして作成されたフ
  1896.     ァイルからドラムパートにパンポットを割り振ります。
  1897.      これによりバスドラムは真ん中,ハイハットは少し右,クラッシュシン
  1898.     バルは右から,といった具合にパンポットが設定可能です。
  1899.      実際の使い方,マクロ$TRK に使用するトラック番号を設定して,「#i
  1900.     nclude」でインクルードします。
  1901.      複数のトラックに使いたい場合は,使いたいトラックの数だけ同じよう
  1902.     に$TRK を定義しインクルードします。
  1903.  
  1904.     【使用例】
  1905.         /* トラック10~13に"MPDRUMS.DEF"を使用する */
  1906.         #define     TRK     10
  1907.         #include    "mpdrums.def"
  1908.         #define     TRK     11
  1909.         #include    "mpdrums.def"
  1910.         #define     TRK     12
  1911.         #include    "mpdrums.def"
  1912.         #define     TRK     13
  1913.         #include    "mpdrums.def"
  1914.  
  1915.  
  1916.  
  1917.   ●  参考文献
  1918.  
  1919.  
  1920.     「HGPLAY version 2 EDPLAY」,Tarosa
  1921.                     ソフトバンク,月間◎h!FM 1989年6月号
  1922.  
  1923.     「FMTOWNS Cライブラリ リファレンス」
  1924.                     富士通,1989年10月
  1925.  
  1926.  
  1927.   ●    Ending
  1928.  
  1929.  
  1930.                    《Used  tools》
  1931.  
  1932.                FMTOWNS High C Compiler V1.4
  1933.                             JGAWK
  1934.                        MIFES, RED2 & Vz
  1935.  
  1936.  
  1937.                 《Special  Thanks》
  1938.  
  1939.                       初代からくり屋(山)
  1940.                二代目からくり屋 た○ぴ○ん(^_^;)
  1941.                         組紐屋HideKun
  1942.                               & 
  1943.                        ALL 『闇』 member
  1944.  
  1945.                  自来也愛好会 HONESEN & PONKARA
  1946.  
  1947.                  ◎h!FM 編集部 & 協力スタッフ
  1948.  
  1949.  
  1950.  
  1951.  
  1952.                     1990.12.10  By TaroPYON
  1953.  
  1954.